/*
https://leetcode.cn/problems/longest-increasing-subsequence/
思路与算法

定义 dp[i] 为考虑前 i 个元素，以第 i 个数字结尾的最长上升子序列的长度，注意 nums[i] 必须被选取。

我们从小到大计算 dp 数组的值，在计算 dp[i] 之前，我们已经计算出 dp[0…i−1] 的值，则状态转移方程为：

dp[i]=max(dp[j])+1,其中0≤j<i且num[j]<num[i]
*/
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        vector<int>dp(nums.size(),1);
        dp[0] = 1;

        for(int i = 1;i < nums.size(); i++){
            int max_dp=0;
            for(int j=0; j<i;j++){
                if(nums[i]>nums[j]){
                    max_dp = max(max_dp, dp[j]);
                }
            }
            dp[i]=max_dp +1;


        }
        sort(dp.begin(),dp.end());
        for(auto it : dp){cout<<it<<" ";}
        return dp[nums.size()-1];
    }
};